<?php

/*
  --- PROJECT COFELY 2011, GRAFIEKEN --
  auteur: Leander Molegraaf
  versie: 2.0.2
  datum: 27-03-2012

  BESCHRIJVING:
  een bar plot diagram waarvan de waardes apart ingesteld kunnen worden door een GET te gebruiken in de link (dus <a href='dezepagina.php?a=b,c=d' /> </a>)
  De variabele zijn ingedeeld in 2 delen, de essentiele en optionele. als een essentiele variabel mist, mislukt het renderen. als een optionele mist, wordt een default value gebruikt.

  ESSENTIEEL:
  -naam-        -type-    -beschrijving-
  aantalGoedX   (int)          voor elke profitcenter moet worden meegegeven hoeveel procent hiervan goed is. de x wordt vervangen door een cijfer.
  Om bijvoorbeeld voor het eerste profitcenter op te geven dat 30% goed is, wordt er het volgende stuk code meegegeven: aantalGoed1=30
  het eerste cijfer moet een 1 zijn, er worden maximaal 12 cijfers ondersteund.
  LET OP: het aantal goed/slecht/fout moet per profitcenter op 100 uitkomen.
  aantalSlechtX(int)           Zie hierboven, hier komt de "onvoldoende" (gele) waarden
  aantalFoutX  (int)           Zie hierboven, hier komen de rode (afgekeurde) waardes
  nameX       (String)         Alle namen die onderaan de X as moeten staan. de eerste balk (met de eerste aantalGoed, aantalSlecht & aantalFout) behoort aan naam1, vervolgens naam2, etc.
  Let er op dat er evenveel namen zijn als gegevens, anders zullen er aan het einde van de grafiek lege rijen staan.
  Default naar de namen van de profitcenter van project Cofely1. voor dit project wordt aangeraden deze values niet in te vullen (tenzij er profitcenters bijkomen)
  Het eerste cijfer moet een 1 zijn, er worden maximaal 12 cijfers ondersteund.
  OPTIONEEL:
  -naam-        -type-   -default-    -beschrijving-
  defaultLegenda (bool) false         Als deze variabel true is, wordt de default legenda gebruikt. de namen zijn "aanwezig" voor alle values die via aantalGoed binnenkomen en "onvoldoende" & "gemist" voor de andere 2.
  LegendaX      (String) ^^^^         Set de drie legendas zelf. waardes die uit aantalGoed komen, krijgen de legenda Legenda1, aantalSlecht krijgt Legenda2 en aantalFout krijgt Legenda3.
  je kan alleen OF alle 3 de legenda's doorgeven, of GEEN legenda.
  Als er geen legendas worden doorgegeven, en defaultLegenda (zie hierboven) staat uit, dan wordt er GEEN legenda weergegeven.
  graphWidth    (int)   310           de width van de grafiek (het plaatje wat dus wordt weergegeven). gebruik dit ipv. width="310" in HTML, om te voorkomen dat de image er gestrekt uit komt te zien
  graphHeight   (int)   400           Hetzelfde als hierboven, maar dan voor de height ipv. de width.
  marginX       (int)   40,30,20,40   De margins die bepalen hoe ver de grafiek van elke rand af staat. hierdoor wordt ruimte gecreerd voor de titels, legendas, etc.
  Er zijn in totaal 4 margins (voor elke rand 1 dus).
  title         (String)  (leeg)      De titel van de grafiek.
  horizontaal   (bool)    true        als deze value true is, krijg je liggende balken, anders staand.


  WERKING:
  dit is geen klasse, en hoeft dus NIET geinitialliseerd worden, en is geen onderdeel van het klassendiagram.
  Deze pagina moet worden aangeroepen alsof het een image was.
  De gegevens die hier boven beschreven worden, moeten als GET in de link geinclude worden. (deze gegevens komen waarschijnlijk wel uit de database).
  Het onderstaande voorbeeld genereerd een bar plot diagram met zo weinig mogelijk gegevens, en zo veel mogelijk instellingen:
  <img src='StatGrafiek.php?aantalGoed1=10&aantalGoed2=30&aantalSlecht1=50&aantalSlecht2=40&aantalFout1=40&aantalFout2=30&name1=bar1&name2=bar2'>

  terwijl de onderstaande bar plot diagram ook de legenda en titel toevoegt, en de grootte wijzigt.
  <img src='StatGrafiek.php?aantalGoed1=10&aantalGoed2=30&aantalSlecht1=50&aantalSlecht2=40&aantalFout1=40&aantalFout2=30&name1=bar1&name2=bar2&Legenda1=goed&Legenda2=matig&legenda3=slecht&title=ditiseentitel&graphWidth=1920&graphHeight=1080'>

  TECHNISCHE DETAILS:
  1.1	tijdens het ontwikkelen met JPGraph kan het voorkomen dat de browser een "image kan niet worden geopend omdat het fouten bevat" foutbericht geeft.
  Dit komt door enkele specifieke foutberichten het script niet stopt, maar deze wel inbufferd en voorbereid om naar de browser te versturen.
  aangezien JPGraph de headers voor een image stuurt en niet die van een tekstbestand, probeert de browser het foutbericht te lezen alsof het
  onderdeel van de image.
  Om dit te voorkomen wordt aangeraden om de php.ini setting output buffer uit te zetten. daarna kan het daadwerkelijke probleem worden gezien.
  Als je code bug-vrij is, wordt het aangeraden om output-buffer weer op zijn default value te zetten.
  1.2	Elke teken in dit document die naar de browser wordt verstuurd zorgt voor een foutbericht. er mag in dit document geen contact met de browser
  zijn, met uitzondering van de onderste functie (stroke()). zelf een spatie voor de php openings-tag zal voor fouten zorgen.
  1.3	Toen deze pagina voor het eerst was geschreven, had JPGraph support voor zogenaamde "themes": een XML setting met enkele default settings betreffend de kleuren.
  Deze is in een latere versie verwijderd, en een alternatief is (nog) niet geimplementeerd. De code die gebruikt werdt om een theme op te roepen staat nog gecomment
  in de code.
  1.4	Mocht het nodig zijn om meerder graffieken naast elkaar te plaatsen, dan is dat mogelijk door in deze code een nieuwe instantie te maken van PiePlot of PiePlot3d
  (in deze code $p1) die een array met alle gegevens vereist (in ons geval alle valueX waardes).
  het is wel nodig om de link naar deze image aan te passen zodat er data voor de tweede graffiek mee wordt gestuurd, en eventueel ook als je de settings zoals 3D, exploded etc.
  wilt veranderen (dit hoeft niet).
  de width, height en title horen bij de image, niet bij elke aparte grafiek. ze kunnen dus niet geherdefineerd worden.
  1.5 Alle IE7 en lager versies hebben problemen bij het printen en en renderen, als deze nodig blijken, moet er een script
  worden geschreven die de dynamische image opslaat op de schijf van de server, en de link naar die image gebruiken. dit kan niet vanuit dit script, of een andere JPGraph script
  aangezien dat dan alsnog dynamische images zijn. Dit vereist extra codeerwerk, opslagruimte(+schrijfrechten) en beheer (images moeten ook ooit weer verwijderd worden).
  deze bug is in andere browsers, voor zo ver bekend, niet voorgekomen.

  OPMERKINGEN:
  1.1	Deze pagina is afhankelijk van de Library JPGraph, 	de huidige meegeleverde versie werk alleen met PHP5,
  mocht dit niet werken, dan moet JPGraph 1.27.1 gedownload worden.
  onder de include van de huidige JPGraph versie, staat een stuk code wat kan kiezen uit beide JPgraph versies op basis van de gerapporteerde PHP versie.
  1.2 Deze library heeft nog geen officiele 64 bits ondersteuning, maar werkt daar wel op. (daar heb ik het op getest namelijk)
  1.3 Het renderen van een grafiek neemt relatief veel tijd in beslag. in het geval van (meerdere/zeer complexe) grafieken, kan het nodig zijn dat de timeout waarde van php wordt verhoogd
  1.4 Het is aangeraden om de maximale beschikbare geheugen voor PHP aan te passen naar 32MB of hoger. voor simpele tabellen is dat niet verplicht, maar als er veel komen, of deze worden complexer
  dan kan PHP zonder geheugen raken.
  1.5	een volledige handleiding kan worden gevonden op http://doc.async.com.br/jpgraph/html

  CHANGELOG:
  2.0.1:
  - comments aangepast om alle informatie te geven, ipv een verwijzing naar een extern bestand
  - support voor oude JPGraph verwijderd, opmerking 1.1 is hierop aangepast, en de oude code die de juiste JPGraph versie uitkoos is gecommend.
  (mocht het later nog nodig zijn)
  - namen verplicht gemaakt

  2.0.2:
  - bestandsnamen van de statistiek beginnen allemaal met Stat

  GERELATEERDE BESTANDEN:
  jpgraph-3.5.0b1
 */

date_default_timezone_set('Europe/Amsterdam'); //zet de standaard tijdzone. JPGraph heeft dat nodig voordat er iets geinclude wordt

require_once 'defs/Constants.php';
require_once ('jpgraph-3.5.0b1/src/jpgraph.php');
require_once ('jpgraph-3.5.0b1/src/jpgraph_bar.php'); //for some reason, JPGraph refuses to work when these 2 includes are defines instead of Strings.

/* $phpversion = explode(".", phpversion());
  if ($phpversion[0] == "5")
  {
  require_once ('jpgraph-3.5.0b1/src/jpgraph.php');
  require_once ('jpgraph-3.5.0b1/src/jpgraph_bar.php');
  }
  else
  {
  //php is niet versie vijf, dus moet een verouderde library voor v4 gebruikt worden.
  //php 3 en lager zou in theorie moeten werken, maar is niet getest.
  require_once ('jpgraph-1.27.1/src/jpgraph.php');
  require_once ('jpgraph-1.27.1/src/jpgraph_bar.php');
  } */

if (isset($_GET['aantalGoed1'])) {
    $data1y = array($_GET['aantalGoed1']);
    if (isset($_GET['aantalGoed2'])) {
        $data1y[1] = $_GET['aantalGoed2'];
        if (isset($_GET['aantalGoed3'])) {
            $data1y[2] = $_GET['aantalGoed3'];
            if (isset($_GET['aantalGoed4'])) {
                $data1y[3] = $_GET['aantalGoed4'];
                if (isset($_GET['aantalGoed5'])) {
                    $data1y[4] = $_GET['aantalGoed5'];
                    if (isset($_GET['aantalGoed6'])) {
                        $data1y[5] = $_GET['aantalGoed6'];
                        if (isset($_GET['aantalGoed7'])) {
                            $data1y[6] = $_GET['aantalGoed7'];
                            if (isset($_GET['aantalGoed8'])) {
                                $data1y[7] = $_GET['aantalGoed8'];
                                if (isset($_GET['aantalGoed9'])) {
                                    $data1y[8] = $_GET['aantalGoed9'];
                                    if (isset($_GET['aantalGoed10'])) {
                                        $data1y[9] = $_GET['aantalGoed10'];
                                        if (isset($_GET['aantalGoed11'])) {
                                            $data1y[10] = $_GET['aantalGoed11'];
                                            if (isset($_GET['aantalGoed12'])) {
                                                $data1y[11] = $_GET['aantalGoed12'];
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
} else {
    echo(STATGRAFIEK_ERROR_AANTALGOED);
}

if (isset($_GET['aantalSlecht1'])) {
    $data2y = array($_GET['aantalSlecht1']);
    if (isset($_GET['aantalSlecht2'])) {
        $data2y[1] = $_GET['aantalSlecht2'];
        if (isset($_GET['aantalSlecht3'])) {
            $data2y[2] = $_GET['aantalSlecht3'];
            if (isset($_GET['aantalSlecht4'])) {
                $data2y[3] = $_GET['aantalSlecht4'];
                if (isset($_GET['aantalSlecht5'])) {
                    $data2y[4] = $_GET['aantalSlecht5'];
                    if (isset($_GET['aantalSlecht6'])) {
                        $data2y[5] = $_GET['aantalSlecht6'];
                        if (isset($_GET['aantalSlecht7'])) {
                            $data2y[6] = $_GET['aantalSlecht7'];
                            if (isset($_GET['aantalSlecht8'])) {
                                $data2y[7] = $_GET['aantalSlecht8'];
                                if (isset($_GET['aantalSlecht9'])) {
                                    $data2y[8] = $_GET['aantalSlecht9'];
                                    if (isset($_GET['aantalSlecht10'])) {
                                        $data2y[9] = $_GET['aantalSlecht10'];
                                        if (isset($_GET['aantalSlecht11'])) {
                                            $data2y[10] = $_GET['aantalSlecht11'];
                                            if (isset($_GET['aantalSlecht12'])) {
                                                $data2y[11] = $_GET['aantalSlecht12'];
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
} else {
    echo(STATGRAFIEK_ERROR_AANTALSLECHT);
}

if (isset($_GET['aantalFout1'])) {
    $data3y = array($_GET['aantalFout1']);
    if (isset($_GET['aantalFout2'])) {
        $data3y[1] = $_GET['aantalFout2'];
        if (isset($_GET['aantalFout3'])) {
            $data3y[2] = $_GET['aantalFout3'];
            if (isset($_GET['aantalFout4'])) {
                $data3y[3] = $_GET['aantalFout4'];
                if (isset($_GET['aantalFout5'])) {
                    $data3y[4] = $_GET['aantalFout5'];
                    if (isset($_GET['aantalFout6'])) {
                        $data3y[5] = $_GET['aantalFout6'];
                        if (isset($_GET['aantalFout7'])) {
                            $data3y[6] = $_GET['aantalFout7'];
                            if (isset($_GET['aantalFout8'])) {
                                $data3y[7] = $_GET['aantalFout8'];
                                if (isset($_GET['aantalFout9'])) {
                                    $data3y[8] = $_GET['aantalFout9'];
                                    if (isset($_GET['aantalFout10'])) {
                                        $data3y[9] = $_GET['aantalFout10'];
                                        if (isset($_GET['aantalFout11'])) {
                                            $data3y[10] = $_GET['aantalFout11'];
                                            if (isset($_GET['aantalFout12'])) {
                                                $data3y[11] = $_GET['aantalFout12'];
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
} else {
    echo(STATGRAFIEK_ERROR_AANTALFOUT);
}

if (isset($_GET['name1'])) {
    $name = array($_GET['name1']);
    if (isset($_GET['name2'])) {
        $name[1] = $_GET['name2'];
        if (isset($_GET['name3'])) {
            $name[2] = $_GET['name3'];
            if (isset($_GET['name4'])) {
                $name[3] = $_GET['name4'];
                if (isset($_GET['name5'])) {
                    $name[4] = $_GET['name5'];
                    if (isset($_GET['name6'])) {
                        $name[5] = $_GET['name6'];
                        if (isset($_GET['name7'])) {
                            $name[6] = $_GET['name7'];
                            if (isset($_GET['name8'])) {
                                $name[7] = $_GET['name8'];
                                if (isset($_GET['name9'])) {
                                    $name[8] = $_GET['name9'];
                                    if (isset($_GET['name10'])) {
                                        $name[9] = $_GET['name10'];
                                        if (isset($_GET['name11'])) {
                                            $name[10] = $_GET['name11'];
                                            if (isset($_GET['name12'])) {
                                                $name[11] = $_GET['name12'];
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
} else {
    echo(STATGRAFIEK_ERROR_NAMEN);
}

if (isset($_GET['legenda1']) && $_GET['legenda1'] != '') {
    $legendaSet = true;
    $legendas = array($_GET['legenda1']);
    if (isset($_GET['legenda2'])) {
        $legendas[1] = $_GET['legenda2'];
        if (isset($_GET['legenda3'])) {
            $legendas[2] = $_GET['legendas3'];
        }
    }
} else if (isset($_GET['defaultlegenda'])) {
    if ($_GET['defaultlegenda'] == 1) {
        $legendaSet = true;
        $legendas = array("aanwezig", "afwezig", "afwezig met reden");
    }
} else {
    $legendaSet = false;
}

if (isset($_GET['graphwWidth'])) {
    $graphwidth = $_GET['graphWidth'];
} else {
    $graphwidth = STAT_GRAFIEK_DEFAULTGRAPHWIDTH;
}


if (isset($_GET['graphHeight'])) {
    $graphheight = $_GET['graphHeight'];
} else {
    $graphheight = STAT_GRAFIEK_DEFAULTGRAPHHEIGHT;
}


if (isset($_GET['margin1'])) {
    $margin1 = $_GET['margin1'];
} else {
    $margin1 = STAT_GRAFIEK_DEFAULTMARGIN1;
}

if (isset($_GET['margin2'])) {
    $margin2 = $_GET['margin2'];
} else {
    $margin2 = STAT_GRAFIEK_DEFAULTMARGIN2;
}



if (isset($_GET['margin3'])) {
    $margin3 = $_GET['margin3'];
} else {
    $margin3 = STAT_GRAFIEK_DEFAULTMARGIN3;
}



if (isset($_GET['margin4'])) {
    $margin4 = $_GET['margin4'];
} else {
    $margin4 = STAT_GRAFIEK_DEFAULTMARGIN4;
}

if (isset($_GET['title'])) {
    $title = $_GET['title'];
} else {
    $title = " ";
}



$graph = new Graph($graphwidth, $graphheight);
$graph->SetScale("textlin");
$graph->SetShadow(); //in geval van performance issues: haal dit weg
$graph->img->SetMargin($margin1, $margin2, $margin3, $margin4);

$b1plot = new BarPlot($data1y);
$b2plot = new BarPlot($data2y);
$b3plot = new BarPlot($data3y);

if ($legendaSet == true) {
    $b1plot->setLegend($legendas[0]);
    $b2plot->setLegend($legendas[1]);
    $b3plot->setLegend($legendas[2]);
}

$gbplot = new AccBarPlot(array($b1plot, $b2plot, $b3plot));
$graph->Add($gbplot);
$b1plot->SetFillColor('#00FF00');
$b2plot->SetFillColor('#FFFF00');
$b3plot->SetFillColor('#FF0000');

if ($legendaSet == true) {
    $graph->legend->SetPos(0.5, 0.98, 'center', 'bottom');
    $graph->legend->SetLayout(LEGEND_HOR);
}

$graph->title->Set($title);
$graph->xaxis->SetTickLabels($name);
$graph->yaxis->title->set(STAT_GRAFIEK_YAXISTITLE);
$graph->xaxis->title->set(STAT_GRAFIEK_XAXISTITLE);

$graph->title->SetFont(FF_FONT1, FS_BOLD);
$graph->yaxis->title->SetFont(FF_FONT1, FS_BOLD);
$graph->xaxis->title->SetFont(FF_FONT1, FS_BOLD);

if (isset($_GET['horizontaal'])) {
    if ($_GET['horizontaal'] == true) {
        $graph->Set90AndMargin();
    }
}
$graph->Stroke(); //php code die hierna komt, wordt genegeerd.
?>